home *** CD-ROM | disk | FTP | other *** search
/ Aminet 6 / Aminet 6 - June 1995.iso / Aminet / comm / bbs / logic100.lha / developer / examples / SentBy.s next >
Encoding:
Text File  |  1995-03-01  |  11.6 KB  |  720 lines

  1. ****************************************************************************
  2. *                        SentBy for Logicbbs                              *
  3.  *                       -------------------                             *
  4.   *                    Written by  Michael Pendec                       *
  5.    *                Copyright 1995 ParCon Software                     *
  6.     *******************************************************************
  7.  
  8. ;Source is originally written for AsmOne and will be compiled
  9. ; correctly with AsmOne. But other compilers may work just as well.
  10.  
  11.  
  12.         INCDIR    source:includes/
  13.         include    "lvo3.0/exec_lib.i"
  14.         include    "lvo3.0/dos_lib.i"
  15.         include    "lvo3.0/LBBS_Lvo_lib.i"
  16.  
  17. WriteTextScreen    MACRO
  18.         move.l    MyNodePtr(pc),d1
  19.         lea    \1(A4),a0
  20.         move.l    a0,d2
  21.         moveq    #0,d3
  22.         CALLLBB    Write
  23.         tst.l    d0
  24.         bmi.w    FreeNode
  25.         ENDM
  26.  
  27. GetInput        MACRO
  28.         move.l    MyNodePtr(pc),d1
  29.         lea    \1(A4),a0
  30.         move.l    a0,d2
  31.         move.l    #\2,d3
  32.         CALLLBB    Read
  33.         tst.l    d0
  34.         bmi.w    FreeNode
  35.         ENDM
  36. GetInputNoCR    MACRO
  37.         move.l    MyNodePtr(pc),d1
  38.         lea    \1(A4),a0
  39.         move.l    a0,d2
  40.         move.l    #\2,d3
  41.         CALLLBB    ReadNoCR
  42.         tst.l    d0
  43.         bmi.w    FreeNode
  44.         ENDM
  45.  
  46.         basereg    Mya4ptr,a4
  47.  
  48.         section    SentBy,code
  49.  
  50. j        movem.l    d0-a6,-(A7)
  51.         lea    mya4ptr,a4
  52.         move.l    a7,OldStack(a4)
  53.         pea    (a0)
  54.         lea    doslib(a4),a1
  55.         moveq    #0,d0
  56.         CALLEXEC    OpenLibrary
  57.         move.l    d0,_DosBase(a4)
  58.         lea    LibraryName(a4),a1
  59.         moveq    #0,d0
  60.         CALLEXEC    OpenLibrary
  61.         move.l    (a7)+,a0
  62.         tst.l    d0
  63.         beq.w    exitall
  64.         move.l    d0,_LbbsBase(A4)
  65.  
  66.         bsr.w    Get_Number
  67.         move.l    d7,d1
  68.         beq.w    NoNode
  69.         CALLLBB    AllocNode
  70.         tst.l    d0
  71.         bmi.w    Nonode
  72.         move.l    d0,MyNodePtr(A4)
  73.  
  74.  
  75.         move.l    MyNodePtr(A4),d1
  76.         move.l    #buffer,d2
  77.         moveq    #0,d3
  78.         CALLLBB    GetMainLine
  79.         bsr.w    TransMainline
  80.  
  81.         cmp.l    #'FCHE',buffer(a4)
  82.         bne.w    WriteNewFileDesciption
  83.  
  84.  
  85.         WriteTextScreen    MyText
  86.  
  87.         bsr.w    GetUsersSentByLine
  88.         tst.l    d0
  89.         bne.w    .nosentby
  90.         tst.b    SentByString(a4)
  91.         beq.w    .nosentby
  92.         pea    SentByString(a4)
  93.         move.w    #' ',-(a7)
  94.         pea    sentbyLine(a4)
  95.         pea    buffer(a4)
  96.         bsr.w    Insert
  97.         add.w    #14,a7
  98.         lea    Directoryfile(A4),a0
  99.         move.l    a0,d1
  100.         move.l    #1005,d2
  101.         CALLDOS    Open
  102.         move.l    d0,-(A7)
  103.         move.l    d0,d1
  104.         moveq    #0,d2
  105.         moveq    #1,d3
  106.         CALLDOS    Seek
  107.         lea    buffer(a4),a0
  108.         move.l    a0,d2
  109.         moveq    #-1,d3
  110. .e        addq.l    #1,d3
  111.         tst.b    (a0)+
  112.         bne.s    .e
  113.         move.l    (a7),d1
  114.         CALLDOS    Write
  115.         move.l    (A7)+,d1
  116.         CALLDOS    Close
  117.  
  118.         WriteTextScreen    SentByLineAdded
  119.         bra.s    FreeNode
  120. .nosentby        WriteTextScreen    SentByLineError
  121. FreeNode
  122. .e444        move.l    MyNodePtr(A4),d1
  123.         CALLLBB    FreeNode
  124. NoNode        move.l    _LbbsBase(A4),a1
  125.         CALLEXEC    CloseLibrary
  126. exitall        move.l    OldStack(a4),a7
  127.         movem.l    (a7)+,d0-a6
  128.         rts
  129.  
  130.  
  131. GetUsersSentByLine
  132.         move.l    MyNodePtr(A4),d1
  133.         CALLLBB    SlotNumber
  134.         move.l    d0,-(a7)
  135.         pea    SentByDirectory(a4)
  136.         pea    buffer(a4)
  137.         bsr.w    Insert
  138.         add.w    #12,a7
  139.         lea    buffer(a4),a0
  140.         move.l    a0,d1
  141.         move.l    #1005,d2
  142.         CALLDOS    Open
  143.         tst.l    d0
  144.         beq.b    nosentby
  145.         move.l    d0,d7
  146.         lea    SentByString(a4),a0
  147.         move.l    a0,d2
  148.         move.l    #98,d3
  149.         move.l    d0,d1
  150.         CALLDOS    Read
  151.         move.l    d7,d1
  152.         CALLDOS    Close
  153.         moveq    #0,d0
  154.         dc.w    $c40
  155. nosentby        moveq    #1,d0
  156.         rts
  157.  
  158. PutUsersSentByLine    move.l    MyNodePtr(A4),d1
  159.         CALLLBB    SlotNumber
  160.         move.l    d0,-(a7)
  161.         pea    SentByDirectory(a4)
  162.         pea    buffer(a4)
  163.         bsr.w    Insert
  164.         add.w    #12,a7
  165.         lea    buffer(a4),a0
  166.         move.l    a0,d1
  167.         move.l    #1006,d2
  168.         CALLDOS    Open
  169.         tst.l    d0
  170.         beq.b    .nosentby
  171.         move.l    d0,d7
  172.         lea    SentByString(a4),a0
  173.         move.l    a0,d2
  174.         moveq    #-1,d3
  175. .e        addq.l    #1,d3
  176.         tst.b    (a0)+
  177.         bne.s    .e
  178.         move.l    d0,d1
  179.         CALLDOS    Write
  180.         move.l    d7,d1
  181.         CALLDOS    Close
  182.         moveq    #0,d0
  183.         dc.w    $c40
  184. .nosentby        moveq    #1,d0
  185.         rts
  186.  
  187. WriteNewFileDesciption
  188.         WriteTextScreen    MyText1
  189.  
  190.         bsr.w    GetUsersSentByLine
  191.         tst.l    d0
  192.         bne.w    .EnterNew
  193.         WriteTextScreen    FoundSentBy
  194.         WriteTextScreen    SentByString
  195.         WriteTextScreen    UseThis
  196.         move.l    MyNodePtr(A4),d1
  197.         moveq    #0,d2
  198.         CALLLBB    ReadOne
  199.         move.l    d0,-(A7)
  200.         move.b    d0,buffer(a4)
  201.         clr.b    buffer+1(a4)
  202.         WriteTextScreen    buffer
  203.         move.l    (a7)+,d0
  204.         bclr    #5,d0
  205.         cmp.b    #'N',d0
  206.         bne.w    FreeNode
  207. .EnterNew        WriteTextScreen    EnterNewSentby
  208.         GetInput    SentByString,44
  209.         tst.b    SentByString(a4)
  210.         beq.w    FreeNode
  211.         bsr.w    PutUsersSentByLine
  212.         bra.w    FreeNode
  213.  
  214. MyText
  215.  dc.b 10
  216.  dc.b $1b,'[4;33;44m SeNTBy LiNe aDDeR FoR ® LoGiCBBS ',$1b,'[0m',10,0
  217. MyText1
  218.  dc.b 10
  219.  dc.b $1b,'[4;33;44m  SeNTBy LiNe MaKeR/CHaNGeR FoR ® LoGiCBBS  ',$1b,'[0m',10,0
  220.  even
  221.  
  222. EnterNewSentby    dc.b    10
  223.         dc.b    10,$1b,'[36mPLeaSe eNTeR youR PeRSoNaL SeNTBy ',$1b,'[35m(',$1b,'[36m44 CHARS',$1b,'[35m)',$1b,'[0m',10,10
  224.         dc.b    $1b,'[33m············································',$1b,'[0m',$1b,'[44D',0
  225. FoundSentBy    dc.b    10
  226.         dc.b    $1b,'[36mU HaVe aLLReaDy a PeRSoNaL SeNTBy ',$1b,'[35m(',$1b,'[36m44 CHARS',$1b,'[35m)',$1b,'[0m',10,10,0
  227. UseThis        dc.b    10
  228.         dc.b    10,$1b,'[36mWaNNa KeeP iT? ',$1b,'[35m(',$1b,'[36mY/n',$1b,'[35m)',$1b,'[0m',0
  229.  
  230. SentByLineAdded    dc.b    10,$1b,'[36mSeNTBy LiNe aDDeD',$1b,'[0m',10,0
  231. SentByLineError    dc.b    10,$1b,'[33mNO',$1b,'[36m SeNTBy LiNe FoUND, TyPe ',$1b,'[33;44m SENT ',$1b,'[36;40m To MaKe oNe',10,0
  232. SentByDirectory    dc.b    'DOORS:LBBS_Sentby/Sentby.%ld',0
  233. SentByLine    dc.b    '%33Y%-44s',10,0
  234.         even
  235.  
  236. TransMainline    lea    buffer(A4),a0
  237. .e        cmp.b    #' ',(a0)+
  238.         beq.s    .chk
  239.         tst.b    (a0)
  240.         bne.s    .e
  241.         bra.s    .getall
  242. .chk        tst.b    (a0)
  243.         beq.s    .getall
  244.         cmp.b    #' ',(a0)
  245.         beq.s    .e
  246.         lea    CheckedFilename(A4),a1
  247. .ee        cmp.b    #' ',(a0)
  248.         beq.s    .chk1
  249.         move.b    (a0)+,(A1)+
  250.         bne.s    .ee
  251.         bra.s    .getall1
  252. .chk1        addq.w    #1,a0
  253.         clr.b    (a1)
  254.         cmp.b    #' ',(a0)
  255.         beq.s    .chk1
  256.         tst.b    (a0)
  257.         beq.s    .getall1
  258.         lea    Directoryfile(A4),a1
  259. .e1e        cmp.b    #' ',(a0)
  260.         beq.s    .chka1
  261.         move.b    (a0)+,(A1)+
  262.         bne.s    .e1e
  263. .chka1        moveq    #2,d0
  264.         rts
  265. .getall1        moveq    #1,d0
  266.         dc.w    $c40
  267. .getall        moveq    #0,d0
  268.         rts
  269.  
  270. INSERT        lea    Workinsert(A4),a5
  271.         MOVEM.L    4(A7),A2-A3
  272.         move.b    #' ',(a5)
  273.         LEA    12(A7),A0
  274.         MOVE.L    A0,-(A7)
  275. C660:        MOVE.B    (A3)+,D0
  276.         BEQ.S    C66E
  277.         CMP.B    #'%',D0
  278.         BEQ.S    C674
  279. C66A:        MOVE.B    D0,(A2)+
  280.         BRA.S    C660
  281. C66E:        ADDQ.W    #4,SP
  282.         MOVE.B    D0,(A2)+
  283.         RTS
  284. C674:        lea    2(a5),a1
  285.         CLR.W    D3
  286.         cmp.b    #'%',(a3)
  287.         beq.s    C66A
  288.         cmp.b    #' ',(a3)
  289.         beq.s    C66A
  290.         cmp.b    #9,(a3)
  291.         beq.s    C66A
  292.         cmp.b    #10,(a3)
  293.         beq.s    C66A
  294.         CMP.B    #'@',(A3)
  295.         BNE.S    .r1
  296.         BSET    #4,D3
  297.         ADDQ.W    #1,A3
  298. .r1        CMP.B    #',',(A3)
  299.         BNE.S    .r
  300.         BSET    #3,D3
  301.         ADDQ.W    #1,A3
  302.  
  303. .r        CMP.B    #'-',(A3)
  304.         BNE.S    C686
  305.         BSET    #0,D3
  306.         ADDQ.W    #1,A3
  307.  
  308. C686:        CMP.B    #'0',(A3)
  309.         BNE.S    C690
  310.         BSET    #1,D3
  311. C690:
  312.         BSR.W    C768
  313.         MOVE.W    D0,D6
  314.         moveq    #0,d5
  315.         CMP.B    #'.',(A3)
  316.         BNE.S    C6A6
  317.         ADDQ.W    #1,A3
  318.         BSR.W    C768
  319.         MOVE.W    D0,D5
  320. C6A6        CMP.B    #'Y',(A3)
  321.         BNE.S    .gh
  322.         ADDQ.W    #1,A3
  323.         BSR.S    C6D2
  324.         MOVE.B    D4,(A5)
  325.         clr.b    2(a5)
  326.         BRA.B    C70A
  327. .gh        CMP.B    #'u',(A3)
  328.         BNE.S    .l
  329.         BSET    #5,D3
  330.         BSET    #2,D3
  331.         ADDQ.W    #1,A3
  332.         BSR.S    C6D0
  333.         BSR.W    CONVtoDEC
  334.         BRA.B    C70A
  335. .l        CMP.B    #'l',(A3)
  336.         BNE.S    C6B2
  337.         BSET    #2,D3
  338.         ADDQ.W    #1,A3
  339. C6B2:        MOVE.B    (A3)+,D0
  340.         CMP.B    #'d',D0
  341.         BNE.S    C6C2
  342.         BSR.S    C6D0
  343.         BSR.W    CONVtoDEC
  344.         BRA.B    C70A
  345. C6C2:        CMP.B    #'x',D0
  346.         BNE.S    C6F0
  347.         BSR.S    C6D0
  348.         BSR.W    C808
  349.         BRA.B    C70A
  350. C6D0:        BTST    #2,D3
  351.         BNE.S    C6E4
  352. C6D2        MOVE.L    4(A7),A0
  353.         MOVE.W    (A0)+,D4
  354.         MOVE.L    A0,4(A7)
  355.         EXT.L    D4
  356.         RTS
  357. C6E4:        MOVE.L    4(A7),A0
  358.         MOVE.L    (A0)+,D4
  359.         MOVE.L    A0,4(A7)
  360.         RTS
  361. C6F0        CMP.B    #'s',D0
  362.         BNE.S    C6FE
  363.         MOVE.L    (A7),A0
  364.         MOVE.L    (A0)+,A1
  365.         MOVE.L    A0,(A7)
  366.         BRA.S    C710
  367. C6FE:        CMP.B    #'c',D0
  368.         BNE.W    C66A
  369.         BSR.S    C6D2
  370.         MOVE.B    D4,(A1)+
  371.         CLR.B    (A1)
  372. C70A:        lea    2(a5),a1
  373. C710:        MOVE.L    A1,A0
  374.         BSR.S    C75A
  375.         TST.W    D5
  376.         BEQ.S    C71C
  377.         CMP.W    D5,D2
  378.         BHI.S    C71E
  379.  
  380. C71C        MOVE.W    D2,D5
  381. C71E        btst    #4,d3
  382.         beq.s    C71C1
  383.         move.w    d6,d5
  384.         sub.w    d2,d6
  385.         bpl.s    C724
  386.         CLR.W    D6
  387.         BRA.S    C724
  388. C71C1        SUB.W    D5,D6
  389.         BPL.S    C724
  390.         CLR.W    D6
  391. C724:        BTST    #0,D3
  392.         BNE.S    C730
  393.         BSR.S    C742
  394.         BRA.S    C730
  395. C72E        tst.b    (a1)
  396.         beq.s    C731
  397.         MOVE.B    (A1)+,(A2)+
  398. C730        DBRA    D5,C72E
  399. C731        clr.b    (A2)
  400.         BTST    #0,D3
  401.         BEQ.W    C660
  402.         BSR.S    C742
  403.         BRA.W    C660
  404. C742:        MOVE.B    (a5),D2
  405.         BTST    #1,D3
  406.         BEQ.S    C754
  407.         MOVE.B    #$30,D2
  408.         BRA.S    C754
  409. C752:        MOVE.B    D2,(A2)+
  410. C754:        DBRA    D6,C752
  411.         RTS
  412. C75A:        MOVEQ    #-1,D2
  413. C75C:        TST.B    (A0)+
  414.         DBEQ    D2,C75C
  415.         NEG.L    D2
  416.         SUBQ.W    #1,D2
  417.         RTS
  418. C768:        moveq    #0,d0
  419.         moveq    #0,d2
  420. C76C:        MOVE.B    (A3)+,D2
  421.         CMP.B    #$30,D2
  422.         BCS.S    C78C
  423.         CMP.B    #$39,D2
  424.         BHI.S    C78C
  425.         ADD.L    D0,D0
  426.         MOVE.L    D0,D1
  427.         lsl.l    #2,d0
  428.         ADD.L    D1,D0
  429.         SUB.B    #$30,D2
  430.         ADD.L    D2,D0
  431.         BRA.S    C76C
  432. C78C:        SUBQ.W    #1,A3
  433.         RTS
  434.  
  435.  
  436. CONVtoDEC    btst    #5,d3
  437.         beq.s    CONVtoDEC1
  438.         tst.l    d4
  439.         beq.s    .l55
  440.         moveq    #2,d7
  441.         LEA    L7D0(PC),A0
  442.         moveq    #0,d5
  443. .l1        subq.l    #1,d7
  444.         MOVE.L    (A0)+,D1
  445.         BEQ.S    .l55
  446.         move.l    d4,d0
  447.         beq.s    .l44
  448.         bsr.w    _divu
  449.         move.l    d1,d4
  450. .l44        btst    #3,d3
  451.         beq.s    .t
  452.         tst.w    d7
  453.         bne.s    .t
  454.         moveq    #3,d7
  455.         tst.w    d5
  456.         beq.s    .t
  457.         MOVE.B    #',',(A1)+
  458. .t        tst.w    d0
  459.         BNE.S    .l2
  460.         TST.W    D5
  461.         BEQ.S    .l1
  462. .l2        MOVEQ    #-1,D5
  463.         ADD.B    #$30,D0
  464.         MOVE.B    D0,(A1)+
  465.         clr.b    (A1)
  466.         BRA.S    .l1
  467. .l55        ADD.B    #$30,D4
  468.         MOVE.B    D4,(A1)+
  469.         clr.b    (A1)
  470.         RTS
  471.  
  472. CONVtoDEC1    moveq    #2,d7
  473.         TST.L    D4
  474.         BEQ.S    C7C6
  475.         BMI.S    C79A
  476.         NEG.L    D4
  477.         BRA.S    C79E
  478. C79A        MOVE.B    #'-',(A1)+
  479. C79E        LEA    L7D0(PC),A0
  480.         CLR.W    D1
  481. C7A4:        subq.l    #1,d7
  482.         MOVE.L    (A0)+,D2
  483.         BEQ.S    C7C6
  484.         MOVEQ    #-1,D0
  485. C7AA:        ADD.L    D2,D4
  486.         DBGT    D0,C7AA
  487.         SUB.L    D2,D4
  488.         btst    #3,d3
  489.         beq.s    .t
  490.         tst.w    d7
  491.         bne.s    .t
  492.         moveq    #3,d7
  493.         tst.w    d1
  494.         beq.s    .t
  495.         MOVE.B    #',',(A1)+
  496. .t        ADDQ.W    #1,D0
  497.         BNE.S    C7BA
  498.         TST.W    D1
  499.         BEQ.S    C7A4
  500. C7BA:        MOVEQ    #-1,D1
  501.         NEG.B    D0
  502.         ADD.B    #$30,D0
  503.         MOVE.B    D0,(A1)+
  504.         BRA.S    C7A4
  505. C7C6:        NEG.B    D4
  506.         ADD.B    #$30,D4
  507.         MOVE.B    D4,(A1)+
  508.         clr.b    (A1)
  509.         RTS
  510.  
  511. L7D0:        dc.l    1000000000
  512.         dc.l    100000000    ;,
  513.         dc.l    10000000
  514.         dc.l    1000000
  515.         dc.l    100000        ;,
  516.         dc.l    10000
  517.         dc.l    1000    
  518.         dc.l    100        ;,
  519.         dc.l    10
  520.         dc.l    0
  521.  
  522.  
  523. C808:        TST.L    D4
  524.         BEQ.S    C7C6
  525.         CLR.W    D1
  526.         BTST    #2,D3
  527.         BNE.S    C81A
  528.         MOVEQ    #3,D2
  529.         SWAP    D4
  530.         BRA.S    C81C
  531. C81A:        MOVEQ    #7,D2
  532. C81C:        ROL.L    #4,D4
  533.         MOVE.B    D4,D0
  534.         AND.B    #$F,D0
  535.         BNE.S    C82A
  536.         TST.W    D1
  537.         BEQ.S    C83E
  538. C82A:        MOVEQ    #-1,D1
  539.         CMP.B    #9,D0
  540.         BHI.S    C838
  541.         ADD.B    #$30,D0
  542.         BRA.S    C83C
  543. C838:        ADD.B    #$37,D0
  544. C83C:        MOVE.B    D0,(A1)+
  545. C83E:        DBRA    D2,C81C
  546.         clr.b    (a1)
  547.         RTS
  548.  
  549. ; D0 = D0 * D1
  550. _mulu    movem.l    D1-D3,-(SP)
  551.     move.w    D1,D2
  552.     mulu    D0,D2
  553.     move.l    D1,D3
  554.     swap    D3
  555.     mulu    D0,D3
  556.     swap    D3
  557.     clr.w    D3
  558.     add.l    D3,D2
  559.     swap    D0
  560.     mulu    D1,D0
  561.     swap    D0
  562.     clr.w    D0
  563.     add.l    D2,D0
  564.     movem.l    (SP)+,D1-D3
  565.     rts
  566.  
  567.  
  568. ; D0.L = D0.L / D1.L
  569. _divs    movem.l    D1/D4,-(SP)
  570.     tst.l    d0
  571.     beq.s    divs_exit
  572.     clr.l    D4
  573.     tst.l    D0
  574.     bpl.s    .v1
  575.     neg.l    D0
  576.     addq.w    #1,D4
  577. .v1    tst.l    D1
  578.     bpl.s    .v2
  579.     neg.l    D1
  580.     eor.w    #1,D4
  581. .v2    bsr.s    comdivide
  582. divs_chksign    tst.w    D4
  583.     beq.s    divs_exit
  584.     neg.l    D0
  585. divs_exit    movem.l    (SP)+,D1/D4
  586.     tst.l    D0
  587.     rts
  588.  
  589. ; D0.L = D0.L MOD D1.L signed
  590. _mods    movem.l    D1/D4,-(SP)
  591.     clr.l    D4
  592.     tst.l    D0
  593.     bpl.s    .v1
  594.     neg.l    D0
  595.     addq.w    #1,D4
  596. .v1    tst.l    D1
  597.     bpl.s    .b2
  598.     neg.l    D1
  599. .b2    bsr.s    comdivide
  600.     move.l    D1,D0
  601.     bra.s    divs_chksign
  602.  
  603. ; D0.L = D0.L MOD D1.L unsigned
  604. _modu    move.l    D1,-(SP)
  605.     bsr.s    comdivide
  606.     move.l    D1,D0
  607.     move.l    (SP)+,D1
  608.     tst.l    D0
  609.     rts
  610.  
  611. ; D0.L = D0.L / D1.L unsigned
  612. _divu    tst.l    d0
  613.     beq.s    .ww
  614.     bsr.s    comdivide
  615.     tst.l    D0
  616.     rts
  617. .ww    moveq    #0,d0
  618.     moveq    #0,d1
  619.     rts
  620.  
  621. comdivide    movem.l    D2/D3,-(SP)
  622.     swap    D1
  623.     tst.w    D1
  624.     bne.s    .hardldv
  625.     swap    D1
  626.     move.w    D1,D3
  627.     move.w    D0,D2
  628.     clr.w    D0
  629.     swap    D0
  630.     divu    D3,D0
  631.     move.l    D0,D1
  632.     swap    D0
  633.     move.w    D2,D1
  634.     divu    D3,D1
  635.     move.w    D1,D0
  636.     clr.w    D1
  637.     swap    D1
  638.     movem.l    (SP)+,D2/D3
  639.     rts
  640.  
  641. .hardldv    swap    D1
  642.     move.l    D1,D3
  643.     move.l    D0,D1
  644.     clr.w    D1
  645.     swap    D1
  646.     swap    D0
  647.     clr.w    D0
  648.     moveq    #16-1,D2
  649. .loop    add.l    D0,D0
  650.     addx.l    D1,D1
  651.     cmp.l    D1,D3
  652.     bhi.s    .b1
  653.     sub.l    D3,D1
  654.     addq.w    #1,D0
  655. .b1    dbra    D2,.loop
  656.     movem.l    (SP)+,D2/D3
  657.     rts
  658.  
  659.  
  660.  
  661. Get_Number    moveq    #0,d7
  662.         moveq    #0,d6
  663. .t2        moveq    #0,d0
  664.         move.b    (a0)+,d0
  665.         beq.s    .a
  666.         cmp.w    #$20,d0
  667.         beq.s    .t2
  668.         cmp.w    #9,d0
  669.         beq.s    .t2
  670.         cmp.w    #10,d0
  671.         beq.s    .r4
  672.         cmp.w    #'-',d0
  673.         bne.s    .r2a
  674.         moveq    #1,d6
  675. .r3        moveq    #0,d0
  676.         move.b    (a0)+,d0
  677. .r2a        cmp.w    #' ',d0
  678.         beq.s    .r5
  679.         cmp.w    #9,d0
  680.         beq.s    .l1
  681.         cmp.w    #';',d0
  682.         beq.s    .r5
  683.         cmp.w    #10,d0
  684.         beq.s    .r4
  685.         cmp.w    #'0',d0
  686.         blt.s    .r4
  687.         cmp.w    #'9',d0
  688.         bgt.s    .r4
  689. .r2        move.l    d0,-(A7)
  690.         moveq    #10,d1
  691.         move.l    d7,d0
  692.         bsr.w    _Mulu
  693.         move.l    d0,d7
  694.         move.l    (a7)+,d0
  695.         and.w    #$f,d0
  696.         add.l    d0,d7
  697.         bra.s    .r3
  698. .r4        tst.w    d6
  699.         beq.s    .l1
  700.         neg.l    d7
  701. .l1        moveq    #0,d0
  702.         rts
  703. .a        moveq    #1,d0
  704.         rts
  705. .r5        bra.s    .r4
  706.  
  707. Mya4ptr
  708. Doslib        dc.b    'dos.library',0
  709. LibraryName    dc.b    'lbbs.library',0
  710.         even
  711. OldStack    ds.l    1
  712. MyNodePtr    ds.l    1
  713. _LbbsBase    ds.l    1
  714. _DosBase    ds.l    1
  715. CheckedFilename    ds.b    300
  716. Directoryfile    ds.b    300
  717. SentByString    ds.b    100
  718. Workinsert    ds.b    400
  719. buffer        ds.b    1000
  720.